#include <dgus.h>
#include <dgus_abi.h>
#include "dgusii.h"
#include "logger_rte.h"

void dgusii::ser_send_handler_cb(const char *data, size_t len)
{
    serial->write((const u8 *)data, len);
}
extern "C" char *getTaskName();
uint8_t dgusii::ser_available_handler_cb()
{
//    if (((u32)serial & 0xffff0000) != 0x20000000)
//    {
//        logger.error("dgusii::ser_available_handler_cb: serial is not a serial_t pt=%s", getTaskName());
//        return 0;
//    }
    return serial->available();
}

char dgusii::ser_recv_handler_cb() {
//    if (((u32)serial & 0xffff0000) != 0x20000000)
//    {
//        logger.error("dgusii::ser_recv_handler_cb: serial is not a serial_t pt=%s", getTaskName());
//        return 0;
//    }
    return serial->read();
}

void dgusii::packet_handler_cb(char *data, uint8_t cmd, uint8_t len, uint16_t addr, uint8_t bytelen)
{
    // logger.debug("packet_handler_cb");
}

void dgusii::shutdown(bool b)
{
    if (b && poweron)
    {
        set_brightness(0);
        digitalWrite(pwrPin, LOW);
        poweron = false;
        logger.debug("shutdown %d", b);
    }
    if (!b && !poweron)
    {
        digitalWrite(pwrPin, HIGH);
        poweron = true;
        set_brightness(80);
        logger.debug("shutdown %d", b);
    }
}

kSerial *dgusii::serial;
dgus_abi dgus = {
        dgusii::set_var_str,
        dgusii::set_var,
        // dgusii::set_pvar,
        dgusii::beep,
        dgusii::set_page,
        dgusii::get_page,
        dgusii::get_var};

bool dgusii::poweron;
uint8_t dgusii::pwrPin;
uint8_t dgusii::state;
void *dgusii::lock;
